package orderProject

import (
	"web/models"
	"web/pkg/util"
)

type FillOrderProjectService struct {
	// 移除Ctx字段，不再使用context
}

// NewFillOrderProjectService 创建填充服务实例
func NewFillOrderProjectService() *FillOrderProjectService {
	return new(FillOrderProjectService)
}

// FillOne 填充单个订单项目的关联数据
func (s *FillOrderProjectService) FillOne(project *models.LaOrderProject, fillOptions util.FillOption) {
	if project == nil {
		return
	}

	// 根据填充选项填充关联数据
	for key, enabled := range fillOptions {
		if !enabled {
			continue
		}

		switch key {
		case "order":
			s.fillOrder(project)
		case "project_detail":
			s.fillProjectDetail(project)
		case "statistics":
			s.fillStatistics(project)
		}
	}
}

// Fill 批量填充订单项目的关联数据
func (s *FillOrderProjectService) Fill(projects []*models.LaOrderProject, fillOptions util.FillOption) {
	if len(projects) == 0 {
		return
	}

	// 根据填充选项决定填充内容
	for key, enabled := range fillOptions {
		if !enabled {
			continue
		}

		switch key {
		case "order":
			s.batchFillOrders(projects)
		case "project_detail":
			s.batchFillProjectDetails(projects)
		case "statistics":
			s.batchFillStatistics(projects)
		}
	}
}

// fillOrder 填充订单信息
func (s *FillOrderProjectService) fillOrder(project *models.LaOrderProject) {
	// 这里可以填充订单的详细信息
	// 例如：获取对应的订单数据并设置到project结构中
	// 由于LaOrderProject结构中没有预留字段，这里仅作演示
	// 实际使用时可能需要扩展模型结构
}

// fillProjectDetail 填充项目详细信息
func (s *FillOrderProjectService) fillProjectDetail(project *models.LaOrderProject) {
	// 这里可以填充项目的详细信息
	// 例如：根据ProjectID获取项目详情
}

// fillStatistics 填充统计信息
func (s *FillOrderProjectService) fillStatistics(project *models.LaOrderProject) {
	// 这里可以填充与该项目相关的统计信息
}

// batchFillOrders 批量填充订单信息
func (s *FillOrderProjectService) batchFillOrders(projects []*models.LaOrderProject) {
	// 收集所有订单ID
	orderIDs := make([]uint, 0, len(projects))
	orderIDMap := make(map[uint]bool)

	for _, project := range projects {
		if !orderIDMap[project.OrderID] {
			orderIDs = append(orderIDs, project.OrderID)
			orderIDMap[project.OrderID] = true
		}
	}

	// 批量查询订单信息（这里仅作演示）
	// 实际实现时可以查询相关订单数据并填充到projects中
}

// batchFillProjectDetails 批量填充项目详细信息
func (s *FillOrderProjectService) batchFillProjectDetails(projects []*models.LaOrderProject) {
	// 收集所有项目ID
	projectIDs := make([]int, 0, len(projects))
	projectIDMap := make(map[int]bool)

	for _, project := range projects {
		if !projectIDMap[project.ProjectID] {
			projectIDs = append(projectIDs, project.ProjectID)
			projectIDMap[project.ProjectID] = true
		}
	}

	// 批量查询项目详情（这里仅作演示）
	// 实际实现时可以查询相关项目数据并填充到projects中
}

// batchFillStatistics 批量填充统计信息
func (s *FillOrderProjectService) batchFillStatistics(projects []*models.LaOrderProject) {
	// 为每个项目填充统计信息
	for _, project := range projects {
		s.fillStatistics(project)
	}
}
